package org.desktop.web.client.project.grid;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.desktop.web.client.gui.RpcProxyPool;
import org.desktop.web.client.gui.models.APagingGrid;
import org.desktop.web.client.project.proxy.RpcSubProjectProxy;
import org.desktop.web.shared.domain.entities.Project;
import org.desktop.web.shared.domain.entities.SubProject;
import org.desktop.web.shared.domain.project.bean.SubProjectProperties;

import com.google.gwt.core.shared.GWT;
import com.google.gwt.user.client.Window;
import com.sencha.gxt.data.client.loader.RpcProxy;
import com.sencha.gxt.data.shared.ModelKeyProvider;
import com.sencha.gxt.data.shared.loader.FilterPagingLoadConfig;
import com.sencha.gxt.data.shared.loader.PagingLoadResult;
import com.sencha.gxt.widget.core.client.grid.ColumnConfig;

//public class SubProjectsGrid implements IsWidget {
public class SubProjectsGrid extends
		APagingGrid<SubProject, FilterPagingLoadConfig,SubProjectProperties> {

	// private SubProjectProperties properties = GWT
	// .create(SubProjectProperties.class);
	//
	// private Grid<SubProject> grid;
	// private PagingLoader<FilterPagingLoadConfig,
	// PagingLoadResult<SubProject>> loader ;
	// RpcSubProjectProxy proxy ;
	//
	// private PagingToolBar pagingToolBar;

	// @Override
	// public Widget asWidget() {
	// proxy = new RpcSubProjectProxy();
	// loader = new PagingLoader<FilterPagingLoadConfig,
	// PagingLoadResult<SubProject>>(
	// proxy) {
	//
	// @Override
	// protected FilterPagingLoadConfig newLoadConfig() {
	// // TODO Auto-generated method stub
	// return new FilterPagingLoadConfigBean();
	// }
	//
	// };
	// ColumnConfig<SubProject, String> ccDescSubProject = new ColumnConfig<>(
	// properties.descSubProject(), 200, "Nome progetto");
	// ColumnConfig<SubProject, Date> ccStartDate = new ColumnConfig<>(
	// properties.startDate(), 100, "Data inizio");
	// ColumnConfig<SubProject, Date> ccEndDate = new ColumnConfig<>(
	// properties.endDate(), 100, "Data fine");
	//
	// List<ColumnConfig<SubProject, ?>> l = new
	// ArrayList<ColumnConfig<SubProject, ?>>();
	// l.add(ccDescSubProject);
	// l.add(ccStartDate);
	// l.add(ccEndDate);
	//
	// // l.add(columnAddUsers);
	// ColumnModel<SubProject> cm = new ColumnModel<SubProject>(l);
	//
	// final ListStore<SubProject> store = new ListStore<SubProject>(
	// properties.key());
	// loader.addLoadHandler(new
	// LoadResultListStoreBinding<FilterPagingLoadConfig, SubProject,
	// PagingLoadResult<SubProject>>(
	// store));
	//
	// pagingToolBar=new PagingToolBar(2);
	// pagingToolBar.bind(loader);
	//
	// StringFilter<SubProject> descSubProjectFilter = new
	// StringFilter<SubProject>(properties.descSubProject());
	// DateFilter<SubProject> startDateFilter = new
	// DateFilter<SubProject>(properties.startDate());
	// DateFilter<SubProject> endDateFilter = new
	// DateFilter<SubProject>(properties.endDate());
	//
	// grid = new Grid<>(store, cm);
	// grid.setLoader(loader);
	//
	// GridFilters<SubProject> filters = new GridFilters<SubProject>(loader);
	// filters.initPlugin(grid);
	// filters.addFilter(descSubProjectFilter);
	// filters.addFilter(startDateFilter);
	// filters.addFilter(endDateFilter);
	//
	//
	//
	// // TODO Auto-generated method stub
	// return grid;
	// }

	// public void load(int id) {
	// proxy.setId(Integer.toString(id));
	// grid.setLoadMask(true);
	// .load();
	// // grid.setLoadMask(false);
	//
	// }

	// public Grid<SubProject> getGrid() {
	// return grid;
	// }

	// public IsWidget getPagingToolBar() {
	// // TODO Auto-generated method stub
	// return this.pagingToolBar;
	// }

	
	@Override
	public SubProjectProperties getPropertyAccess() {
		// TODO Auto-generated method stub
		return GWT.create(SubProjectProperties.class);
	}

	public SubProjectsGrid(int pageSize, APagingGrid<?, ?, ?> childGrid,
			boolean remoteSort) {
		super(pageSize, childGrid, remoteSort);
		// TODO Auto-generated constructor stub
	}

	public SubProjectsGrid(int pageSize, APagingGrid<?, ?, ?> childGrid,
			boolean remoteSort, APagingGrid<?, ?, ?> parent) {
		super(pageSize, childGrid, remoteSort, parent);
		// TODO Auto-generated constructor stub
	}

	public SubProjectsGrid(int pageSize, APagingGrid<?, ?, ?> parent) {
		super(pageSize, parent);
		// TODO Auto-generated constructor stub
	}

	public SubProjectsGrid(int pageSize, boolean remoteSort,
			APagingGrid<?, ?, ?> parent) {
		super(pageSize, remoteSort, parent);
		// TODO Auto-generated constructor stub
	}

	public SubProjectsGrid(int pageSize) {
		super(pageSize);
		// TODO Auto-generated constructor stub
	}


	@Override
	public List<ColumnConfig<SubProject, ?>> getColumnsConfig() {
		ColumnConfig<SubProject, String> ccDescSubProject = new ColumnConfig<>(
				((SubProjectProperties) getPropertyAccess()).descSubProject(),
				200, "Nome progetto");
		ColumnConfig<SubProject, Date> ccStartDate = new ColumnConfig<>(
				((SubProjectProperties) getPropertyAccess()).startDate(), 100,
				"Data inizio");
		ColumnConfig<SubProject, Date> ccEndDate = new ColumnConfig<>(
				((SubProjectProperties) getPropertyAccess()).endDate(), 100,
				"Data fine");

		List<ColumnConfig<SubProject, ?>> l = new ArrayList<ColumnConfig<SubProject, ?>>();
		l.add(ccDescSubProject);
		l.add(ccStartDate);
		l.add(ccEndDate);
		return l;
	}

	@Override
	public void loadByRowSelected(Object parentSelected) {
		// TODO Auto-generated method stub
		((RpcSubProjectProxy) getRpcProxy()).setId(Integer
				.toString(((Project) parentSelected).getId()));
		load();
	}

	@Override
	public ModelKeyProvider<? super SubProject> key() {
		
		return getPropertyAccess().key();
	}

	@Override
	public void initProxy() {
		setRpcProxy(new RpcSubProjectProxy());
	}

}
